#ifndef GRAPHELEMENTBUILDER_H_
#define GRAPHELEMENTBUILDER_H_

#include "core/Graph.h"
#include "core/Vertex.h"
#include "core/exceptions/DuplicateElementException.h"
#include "parser/ParsedData.h"
#include "util/exceptions/ElementNotFoundException.h"

namespace util {

/*
 * Clase encargada de construir vertices o aristas a partir de los datos
 * parseados.
 */
class GraphElementBuilder {

public:
	GraphElementBuilder();

	~GraphElementBuilder();

	/*
	 * Construye el vertice a partir de los datos parseados y lo agrega al
	 * grafo. En caso de ya existir el vertice devuelve DuplicateElementException.
	 */
	Vertex* buildVertex(parser::IntersectionParsedData* data, Graph &graph)
			throw (DuplicateElementException);

	/*
	 * Construye la arista a partir de los datos parseados y lo agrega al
	 * grafo. En caso de ya existir la arista devuelve DuplicateElementException.
	 */
	Edge* buildEdge(parser::RoadParsedData* data, Graph &graph)
			throw (DuplicateElementException, ElementNotFoundException);

};

}

#endif /* GRAPHELEMENTBUILDER_H_ */
